package com.opensourcebolivia.navidar.service;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.opensourcebolivia.navidar.modelo.Encargado;
import com.opensourcebolivia.navidar.modelo.PersonaAbstract;

public enum EncargadoDAO {
	INSTANCE;
	/*
	 * Lista de todos los encargados.
	 */
	public List<Encargado> listaEncargados() {
		EntityManager em = EMFService.get().createEntityManager();
		// Read the existing entries
		Query q = em.createQuery("select m from Encargado m");
		List<Encargado> encargados = q.getResultList();
		return encargados;
	}

	/*
	 * Agrega un encargado.
	 */
	public void add(String nombres, String apellidoP, String apellidoM, 
			String telefono, String celular, String direccion, String email) {
		synchronized (this) {
			EntityManager em = EMFService.get().createEntityManager();
			Encargado encargado = new Encargado(nombres, apellidoP, apellidoM, telefono, celular, direccion, email);
			em.persist(encargado);
			em.close();
		}
	}

	/*
	 * Obtener todos los registros que contengan nom, appP, appM. 
	 */
	public List<Encargado> obtenerEncargado(String nombres, String apellidoP, String apellidoM) {
		EntityManager em = EMFService.get().createEntityManager();
		Query q = em
				.createQuery("select t from Encargado t where (t.nombres like :nombres " +
						"or t.apellidoP like :apellidoP " +
						"or t.apellidoM like :apellidoM )");
		q.setParameter("nombres", nombres);
		q.setParameter("apellidoP", nombres);
		q.setParameter("apellidoM", nombres);
		List<Encargado> encargados = q.getResultList();
		return encargados;
	}

	/*
	 * Eliminar registro.
	 */
	public void remove(long id) {
		EntityManager em = EMFService.get().createEntityManager();
		try {
			Encargado encargado = em.find(Encargado.class, id);
			em.remove(encargado);
		} finally {
			em.close();
		}
	}
}
